/**
 * Created by JetBrains PhpStorm.
 * User: CEL.L
 * Date: 3/13/12
 * Time: 8:26 PM
 * To change this template use File | Settings | File Templates.
 */
;(function($) {
    DT.Taskbar = function(options) {
        var _this = this;

        this.defaults = {
            desktop     : null,
            icon : DT.pathname + 'resources/images/shortcut/32x32/view-details.png',
            icons : {                           // 所有的快捷方式图标列表
                eternal : [],                   // 被锁定在任务栏中的快捷方式图标
                running : []                    // 运行中的快捷方式，但不是被锁定在任务栏中
            }
        };

        this.handler = {
            taskbar        : null,
            iconsContainer : null
        };

        this._ini  = function(o) {
            options = $.extend(_this.defaults, o);

            return this;
        };

        this._createFrame = function() {
            var handler = _this.handler;

            handler.taskbar = $('<div></div>').addClass('dt-desktop-taskbar')
                // 创建快捷方式图标的容器
                .append(handler.iconsContainer = $('<div></div>').addClass('dt-desktop-taskbar-bar')
                        .appendTo(options.desktop)
                        .css({  width : options.desktop.width() - 15 /* superBar.width */ })
                )
                // 创建返回桌面按钮
                .append($('<div></div>').addClass('dt-desktop-taskbar-super-bar')
                        .appendTo(options.desktop)
                )
                .appendTo(options.desktop);

            return this;
        };

        /**
         * 添加图标到任务栏中
         * @param {Object} iconInfo 要添加的图标的相关信息
         */
        this._addIcon = function(iconInfo /* Object */) {
            var handler = _this.handler;

            // 将图标添加到图标容器中
            iconInfo.ele = $('<div></div>').addClass('dt-desktop-taskbar-icon dt-desktop-taskbar-icon-running')
                .css({
                    paddingLeft     : DT.TASKBAR_ICON_WIDTH,
                    backgroundImage : 'url(' + iconInfo.icon + ')',
                    width           : DT.TASKBAR_TITLE_WIDTH - DT.TASKBAR_ICON_WIDTH
                })
                .bind('click', function() {
                    $(this).siblings().removeClass('dt-desktop-taskbar-icon-current');

                    // 根据guid获取browser/window/box对象，调用对象的toggle事件
                    var obj = DT.moduleManager.getHandler($(this).data('guid'), 'browser'),
                        isTop = DT.moduleManager.getHandler($(this).data('guid'), 'isTop');

                    if (isTop) {
                        $(this).toggleClass('dt-desktop-taskbar-icon-current');
                        obj.toggle();
                    } else {
                        $(this).addClass('dt-desktop-taskbar-icon-current');
                        obj.top();
                    }

                })
                .html(iconInfo.title)
                .appendTo(handler.iconsContainer);


            iconInfo.ele.data('type', iconInfo.type);
            iconInfo.ele.data('guid', iconInfo.guid);
            iconInfo.ele.data('wintype', iconInfo.winType);

            // 如果图标是被锁定在任务栏上的，需要进行缓存与修正宽度
            if (iconInfo.type == 'eternal') {
                iconInfo.ele.removeClass('dt-desktop-taskbar-icon-running').css({ width : 0 });

                var guid = DT.moduleManager.getGUID();

                DT.moduleManager.setHandler(guid, 'desktop', options.desktop);
                DT.moduleManager.setHandler(guid, 'taskbar', handler.taskbar);
                DT.moduleManager.setHandler(guid, 'taskbaricon', iconInfo.ele);
            } else {
                DT.moduleManager.setHandler(iconInfo.guid, 'taskbaricon', iconInfo.ele);
            }
            
            return this;
        };

        /**
         * 删除一个图标
         * @param {Object} icon 要删除的图标对象
         */
        this._delIcon = function(icon /* Object */) {
            var data = options.icons[icon.data('type')];

            if ($.type(data) == 'array') {
                for (var i = data.length - 1; i > -1; --i) {
                    if (data[i] == icon.ele) {
                        data[i] = null;
                        data.splice(i, 1);
                        break;
                    }
                }
                icon.remove();
                icon = null;
            }

            return this;
        };

        this._ini(options);
    };

    DT.Taskbar.prototype = {
        render : function() {
            var _this = this,
                icons = this.defaults.icons;

            this._createFrame();
            $.each(icons.eternal, function(index, item) {
                _this.addIcon(item);
            });
            $.each(icons.running, function(index, item) {
                _this.addIcon(item);
            });
            return this;
        },

        /**
         * 添加快捷方式的图标，即当应用程序打开时要添加到任务栏
         * @param {Object} iconInfo 快捷方式配置信息
         * iconInfo = {
         * type : '图标的类型：eternal/running',
         * winType : '窗口类型：box/window/browser',
         * guid : '与此绑定的GUID',
         * icon : '图标路径',
         * title : '标题',
         * events : { click : '单击事件', dblclick : '双击事件' } }
         */
        addIcon : function(iconInfo /* Object */) {
            var icons = this.defaults.icons;

            if (iconInfo.type == 'eternal') {
                icons.eternal.push(iconInfo);
            } else if (iconInfo.type == 'running') {
                icons.running.push(iconInfo);
            }
            this._addIcon(iconInfo);

            return this;
        },

        /**
         * 根据guid删除一个图标
         * @param {String} guid 要删除的图标的guid值
         */
        delIcon : function(guid /* String */) {
            this._delIcon(DT.moduleManager.getHandler(guid, 'taskbaricon'));

            return this;
        },

        /**
         * 激活一个任务栏图标
         * @param {String} guid 图标对应的guid
         */
        activate : function(guid /* String */) {
            var obj = DT.moduleManager.getHandler(guid, 'taskbaricon');

            if (obj) {
                obj.addClass('dt-desktop-taskbar-icon-current');

                obj = DT.moduleManager.getHandler(guid, obj.data('wintype'));

                obj && obj.show();
            }

            return this;
        },

        /**
         * 取消任务图标的激活状态
         * @param {String} guid 图标对应的guid
         */
        deactivate : function(guid /* String */) {
            var obj = DT.moduleManager.getHandler(guid, 'taskbaricon');

            if (obj) {
                obj.removeClass('dt-desktop-taskbar-icon-current');
            }

            return this;
        }
    };
    DT.Taskbar.prototype.constructor = DT.Taskbar;
})(jQuery);